home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 076-100 / 092 / bawk / bawk.h < prev    next >
C/C++ Source or Header  |  1995-03-13  |  10KB  |  368 lines

  1. /*
  2.  * Bawk constants and variable declarations.
  3.  */
  4. #include <stdlib.h>
  5. #include <ctype.h>
  6. /* #define ANSI_OFF */
  7. #define DBUG_OFF
  8. #include <dbug.h>
  9.  
  10. #ifdef BDS_C
  11. #define EXTERN /* */
  12. #else
  13.  
  14. #ifdef MAIN
  15. #define EXTERN /* */
  16. #else
  17. #define EXTERN extern
  18. #endif
  19.  
  20. #endif
  21.  
  22. /*
  23.  * If QUOTE_STRING_HACK is defined then Bawk programs passed on the
  24.  * command line may delimit strings with either `grave accent` or
  25.  * "double quotes".
  26.  */
  27. #define QUOTE_STRING_HACK
  28.  
  29. /*
  30.  * Table and buffer sizes
  31.  */
  32. #define MAXLINELEN    200    /* longest input line */
  33. #define MAXWORDS    (MAXLINELEN/2)    /* max # of words in a line */
  34. #define MAXWORKBUFLEN    4096    /* longest action or regular expression */
  35. #define MAXVARTABSZ    50    /* max # of symbols */
  36. #define MAXVARLEN    10    /* symbol name length */
  37. #define MAXSTACKSZ    40    /* max value stack length (for expressions) */
  38.  
  39.  
  40. /**********************************************************
  41.  * Current Input File variables                           *
  42.  **********************************************************/
  43. /*
  44.  * Current Input File pointer:
  45.  */
  46. #ifdef BDS_C
  47. EXTERN char *Fileptr, Curfbuf[ BUFSIZ ];
  48. #else
  49. EXTERN FILE *Fileptr;
  50. #endif
  51. EXTERN char *Filename;        /* current input file name */
  52. EXTERN int Linecount;        /* current input line number */
  53. EXTERN int Recordcount;        /* record count */
  54. /*
  55.  * Working buffers.
  56.  */
  57. EXTERN char Linebuf[ MAXLINELEN+1 ];    /* current input line buffer */
  58. EXTERN char *Fields[ MAXWORDS+1 ];    /* pointers to the words in Linebuf */
  59. EXTERN int Fieldcount;            /* and the # of words */
  60. EXTERN char Workbuf[ MAXWORKBUFLEN+1 ];    /* work area for C action and */
  61.                     /* regular expression parsers */
  62.  
  63. /**********************************************************
  64.  * Regular Expression Parser variables                    *
  65.  **********************************************************/
  66. /*
  67.  * Tokens:
  68.  */
  69. #define CHAR    1
  70. #define BOL    2
  71. #define EOL    3
  72. #define ANY    4
  73. #define CLASS    5
  74. #define NCLASS    6
  75. #define STAR    7
  76. #define PLUS    8
  77. #define MINUS    9
  78. #define ALPHA    10
  79. #define DIGIT    11
  80. #define NALPHA    12
  81. #define PUNCT    13
  82. #define RANGE    14
  83. #define ENDPAT    15
  84.  
  85.  
  86. /**********************************************************
  87.  * C Actions Interpreter variables                        *
  88.  **********************************************************/
  89. /*
  90.  * Tokens:
  91.  */
  92. #define T_STRING    16    /* primaries: */
  93. #define T_DOLLAR    17
  94. #define T_REGEXP    18
  95. #define T_REGEXP_ARG    19
  96. #define T_CONSTANT    20
  97. #define T_VARIABLE    21
  98. #define T_FUNCTION    22
  99. #define T_SEMICOLON    23    /* punctuation */
  100. #define T_EOF        24
  101. #define T_LBRACE    25
  102. #define T_RBRACE    26
  103. #define T_LPAREN    27
  104. #define T_RPAREN    28
  105. #define T_LBRACKET    29
  106. #define T_RBRACKET    30
  107. #define T_COMMA        31
  108. #define T_ASSIGN    32    /* operators: */
  109. #define T_STAR        33    /* *foo */
  110. #define T_MUL        34
  111. #define T_DIV        35
  112. #define T_MOD        36
  113. #define T_ADD        37
  114. #define T_UMINUS    38    /* -foo */
  115. #define T_SUB        39
  116. #define T_SHL        40
  117. #define T_SHR        41
  118. #define T_LT        42
  119. #define T_LE        43
  120. #define T_GT        44
  121. #define T_GE        45
  122. #define T_EQ        46
  123. #define T_NE        47
  124. #define T_NOT        48
  125. #define T_ADDROF    49    /* &foo */
  126. #define T_AND        50
  127. #define T_XOR        51
  128. #define T_OR        52
  129. #define T_LNOT        53
  130. #define T_LAND        54
  131. #define T_LOR        55
  132. #define T_INCR        56
  133. #define T_DECR        57
  134. #define T_POSTINCR    58    /* foo++ */
  135. #define T_POSTDECR    59    /* foo-- */
  136. #define T_IF        60    /* keywords: */
  137. #define T_ELSE        61
  138. #define T_WHILE        62
  139. #define T_BREAK        63
  140. #define T_CHAR        64
  141. #define T_INT        65
  142. #define T_BEGIN        66
  143. #define T_END        67
  144. #define T_NF        68
  145. #define T_NR        69
  146. #define T_FS        70
  147. #define T_RS        71
  148. #define T_FILENAME    72
  149. #define T_STATEMENT    73
  150. #define T_DECLARE    74    /* char foo */
  151. #define T_ARRAY_DECLARE    75    /* char foo[5] */
  152.  
  153. #define MAX_TOKEN    T_ARRAY_DECLARE
  154.  
  155. #ifndef DBUG_OFF
  156. extern char *token_name[];
  157. #endif
  158.  
  159. #define PATTERN    'P'    /* indicates C statement is within a pattern */
  160. #define ACTION    'A'    /* indicates C statement is within an action */
  161.  
  162. /*
  163.  * Symbol table
  164.  */
  165.  
  166. struct variable {
  167.     char    vname[ MAXVARLEN ];
  168.     char    vclass;
  169.     char    vsize;
  170.     int    vlen;
  171.     char    *vptr;
  172. };
  173. #define VARIABLE struct variable
  174. EXTERN VARIABLE Vartab[ MAXVARTABSZ ], *Nextvar;
  175. /* A variable may be redeclared. Is this a feature? Should we have block */
  176. /* scopeing? vardecl stores the redeclaration info. */
  177. struct vardecl {
  178.     VARIABLE *variable;
  179.     char    vclass;
  180.     char    vsize;
  181. };
  182. #define VARDECL struct vardecl
  183.  
  184. /*
  185.  * Symbol Table values
  186.  */
  187. #define ACTUAL        0
  188. #define LVALUE        1
  189. #define BYTE        1
  190. #define WORD        (sizeof(char *))
  191.  
  192. /*
  193.  * Value stack
  194.  */
  195. union datum {
  196.     int    ival;
  197.     char     *dptr;
  198.     char    **ptrptr;
  199. };
  200. #define DATUM union datum
  201. struct item {
  202.     char    class;
  203.     char    lvalue;
  204.     char    size;
  205.     DATUM    value;
  206. };
  207. #define ITEM struct item
  208. EXTERN ITEM Stackbtm[ MAXSTACKSZ ], *Stackptr, *Stacktop;
  209. /*
  210.  * parse tree
  211.  */
  212. struct expr_node {
  213.     struct expr_node *left;
  214.     struct expr_node *right;
  215.     char operator;
  216. };
  217. #define EXPR_NODE struct expr_node
  218. /*
  219.  * Miscellaneous
  220.  */
  221. EXTERN char *Actptr;    /* pointer into Workbuf during compilation */
  222. EXTERN char Token;    /* current input token */
  223. EXTERN DATUM Value;    /* and its value */
  224. EXTERN char Saw_break;    /* set when break stmt seen */
  225. EXTERN char Where;    /* indicates whether C stmt is a PATTERN or ACTION */
  226. EXTERN char Fieldsep[128];    /* field seperator */
  227. EXTERN char Recordsep[128];    /* record seperator */
  228. EXTERN EXPR_NODE *Beginact;    /* BEGINning of input actions */
  229. EXTERN EXPR_NODE *Endact;    /* END of input actions */
  230.  
  231. /**********************************************************
  232.  * Rules structure                                        *
  233.  **********************************************************/
  234. struct rule {
  235.     struct {
  236.         EXPR_NODE *start;/* C statements that match pattern start */
  237.         EXPR_NODE *stop;/* C statements that match pattern end */
  238.         char startseen;    /* set if both a start and stop pattern */
  239.                 /* given and if an input line matched the */
  240.                 /* start pattern */
  241.     } pattern;
  242.     EXPR_NODE *action;    /* quasi-C statements parse tree */
  243.     struct rule *nextrule;    /* pointer to next rule */
  244. };
  245. #define RULE struct rule
  246. EXTERN RULE *Rules,        /* rule structures linked list head */
  247.     *Rulep;            /* working pointer */
  248.  
  249.  
  250. /**********************************************************
  251.  * Miscellaneous                                          *
  252.  **********************************************************/
  253. /*
  254.  * Error exit values (returned to command shell)
  255.  */
  256. #define USAGE_ERROR    1    /* error in invokation */
  257. #define FILE_ERROR    2    /* file not found errors */
  258. #define RECORD_ERROR    3    /* input record too long */
  259. #define RE_ERROR    4    /* bad regular expression */
  260. #define ACT_ERROR    5    /* bad C action stmt */
  261. #define MEM_ERROR    6    /* out of memory errors */
  262. /*
  263.  * Functions that return something special:
  264.  */
  265. #ifdef ANSI_OFF
  266. extern EXPR_NODE *act_compile();
  267. extern VARIABLE *addvar();
  268. extern void assignment();
  269. extern char *cclass();
  270. extern void compile();
  271. extern EXPR_NODE *decl_parse();
  272. extern EXPR_NODE *declist_parse();
  273. extern void doaction();
  274. extern int dopattern();
  275. extern void endfile();
  276. extern void error();
  277. extern EXPR_NODE *expr_parse(), *expr_left_to_right_parse();
  278. extern int fetchint();
  279. extern char *fetchptr();
  280. extern VARIABLE *findvar();
  281. extern void function();
  282. extern int getcharacter();
  283. extern EXPR_NODE *get_expr_node();
  284. extern int getline();
  285. extern char *getmemory();
  286. extern char *get_clear_memory();
  287. extern char getoken();
  288. extern void init_pop_array();
  289. extern int instr();
  290. extern int isfunction();
  291. extern int iskeyword();
  292. extern int match();
  293. extern void newfile ();
  294. extern int parse();
  295. extern EXPR_NODE *pat_compile();
  296. extern char *pmatch();
  297. extern int pop();
  298. extern int popint();
  299. extern void postincdec();
  300. extern void preincdec();
  301. extern EXPR_NODE *primary_parse();
  302. extern void process();
  303. extern void push();
  304. extern void pushint();
  305. extern int re_compile();
  306. extern void stmt_lex();
  307. extern EXPR_NODE *stmt_parse();
  308. extern void storeint();
  309. extern void storeptr();
  310. extern char *str_compile();
  311. extern void syntaxerror();
  312. extern int ungetcharacter();
  313. extern void unparse();
  314. extern void usage();
  315. extern void walk_tree();
  316. #else ANSI_OFF
  317. extern EXPR_NODE *act_compile(char *);
  318. extern VARIABLE *addvar(char *);
  319. extern void assignment(void);
  320. extern char *cclass(char *);
  321. extern void compile(void);
  322. extern EXPR_NODE *decl_parse(int);
  323. extern EXPR_NODE *declist_parse(void);
  324. extern void doaction(EXPR_NODE *);
  325. extern int dopattern(EXPR_NODE *);
  326. extern void endfile(void);
  327. extern void error(char *,int);
  328. extern EXPR_NODE *expr_parse(void), *expr_left_to_right_parse(char);
  329. extern int fetchint(char *);
  330. extern char *fetchptr(char *);
  331. extern VARIABLE *findvar(char *);
  332. extern void function(int,EXPR_NODE *);
  333. extern int getcharacter(void);
  334. extern EXPR_NODE *get_expr_node(char);
  335. extern int getline(void);
  336. extern char *getmemory(unsigned);
  337. extern char *get_clear_memory(unsigned);
  338. extern char getoken(void);
  339. extern void init_pop_array(void);
  340. extern int instr(char,char *);
  341. extern int isfunction(char *);
  342. extern int iskeyword(char *);
  343. extern int match(char *,char *);
  344. extern void newfile (char *);
  345. extern int parse(char *,char **,char *);
  346. extern EXPR_NODE *pat_compile(char *);
  347. extern char *pmatch(char *,char *,char *);
  348. extern int pop(void);
  349. extern int popint(void);
  350. extern void postincdec(int);
  351. extern void preincdec(int);
  352. extern EXPR_NODE *primary_parse(void);
  353. extern void process(void);
  354. extern void push(char,char,char,DATUM *);
  355. extern void pushint(int);
  356. extern int re_compile(char *);
  357. extern void stmt_lex(char *);
  358. extern EXPR_NODE *stmt_parse(void);
  359. extern void storeint(char *,int);
  360. extern void storeptr(char *,char *);
  361. extern char *str_compile(char *,char);
  362. extern void syntaxerror(void);
  363. extern int ungetcharacter(char);
  364. extern void unparse(char **,int,char *,char *);
  365. extern void usage(void);
  366. extern void walk_tree(EXPR_NODE *);
  367. #endif ANSI_OFF
  368.